Описание операций
Настройка сервера как контролер домена
Для создания контроллера домена необходима виртуальная машина с Windows Server 2019 или 2016.
- Прописать сетевые настройки на сервере: ip, маску, шлюз, в dns указываем свой ip, так как на сервере будет использоваться роль dns server, она устанавливается вместе с ролью active directory domain services.
- Открыть Диспетчер серверов, и выберите пункт «Add roles and features».
- Укажите Role-based or feature-based installation в качестве типа установки.
- Выберете ваш сервер из пула.
- Добавьте роль Active Directory Domain Services (Доменные службы Active Directory).
- Добавьте компоненты.
- Установите все отмеченные компоненты с помощью кнопки Установить.
- После установки нажимаем Закрыть.
- Откройте Диспетчер серверов и перейдите в роль AD DS.
- В меню нажмите на восклицательный знак (уведомления) и выберете Promote this server to a domain controller (Повысить роль этого сервера до уровня контроллера).
- В появившемся окне настроек выберите «Добавить новый лес» (т.к. действия выполняются впервые) и введите ваше доменное имя.
- Если домен новый (как в нашем случае) и в дальнейшем планируется использовать операционные системы не ниже Windows Server 2016, то режим работы леса и режим работы домена не меняем. Проверяем что установлена галочка на DNS-сервер.
- Установите пароль для режима восстановления службы каталогов и нажмите Далее.
- В Параметрах DNS ничего не меняем и нажимаем Далее.
- Укажите удобное имя домена NetBIOS. Рекомендуем оставить значения по умолчанию.
- Укажите пути до базы данных AD DS, файлов журналов и папки SYSVOL. Рекомендуем оставить значения по умолчанию.
- Проверьте настроенные параметры.
- Проверка предварительных требований сообщит все ли условия соблюдены и выведет отчет. Если проблем никаких не возникло, то мы сможем нажать кнопку Установить.
- После выполнения процесса повышения роли сервера до контроллера домена, сервер автоматически перезагрузится.
Настройка Keycloak
- Войти в Keycloak под технической учетной записью.
- Нажмите на кнопку Create realm.
- Перейдите в раздел меню User Federation и нажмите кнопку Add new provider > LDAP.
- На вкладке Settings заполните поля согласно настройкам вашего AD: Connection URL, Bind ON, Bind credentials.
Для проверки соединения нажмите Test authentication.
- Сохраните настройки с помощью кнопки «Сохранить».
- Перейдите на вкладку Mappers, затем Add mapper.
- Заполните данные согласно рисунку:
- Создать маппер групп: Add mapper.
- Сохраните настройки с помощью кнопки «Сохранить».
- Перейдите в раздел меню Clients и создайте клиент для подсистемы Recsystem согласно картинке:
- На вкладке «Access settings» настройте клиент как на картинке:
- На вкладке «Advanced settings» настройте клиент как на картинке:
- Перейдите на вкладку Service accounts roles и нажмите Assign role.
- Выберите группы как на картинке:
- Выполните синхронизацию групп.
Установка Docker
- Выполнить обновление пакетов:
sudo apt-get update
- Установить вспомогательные пакеты с помощью команды:
apt-get install ca-certificates curl gnupg lsb-release
- Подключить репозиторий с Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Выполнить обновление пакетов:
sudo apt-get update
- Установить Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io
Сборка и запуск docker-контейнеров модулей STN
Установка Модуля определения типа связи
- Скопировать полученный образ в папку /opt и загрузить его в Docker:
sudo docker load --input log-rel.tar.gz
- Создать папку /opt/log-rel_compose:
sudo mkdir /opt/log-rel_compose
- Создать файл compose.yml:
sudo nano /opt/log-rel_compose/compose.yml
- Заполнить содержимое /opt/log-rel _compose/compose.yml следующим содержанием:
version: "3.9"
services:
app:
image: log-rel-protected:latest
command: python run.py
ports:
- "8282:8000"
depends_on:
- redis
environment:
- REDIS_OM_URL=redis://redis:6379/0
restart: always
worker:
image: log-rel-protected:latest
command: python -m app.worker
depends_on:
- redis
environment:
- REDIS_OM_URL=redis://redis:6379/0
restart: always
volumes:
- .cache:/.cache
redis:
image: redis/redis-stack:latest
ports:
- "127.0.0.1:6379:6379"
restart: always
- Настроить модуль с помощью переменных окружения:
Описание переменных окружения
| № | Наименование переменной | Описание |
|---|---|---|
| 1 | TITLE | Название сервиса (по умолчанию: "LOG-REL service") |
| 2 | HOST | Адрес хоста, на котором запускается сервис (по - умолчанию: "0.0.0.0") |
| 3 | PORT | Порт, на котором запускается сервис (по умолчанию: 8000) |
| 4 | MIN_TEXT_LENGTH | Минимальная длина текста (по умолчанию: 3) |
| 5 | MAX_TEXT_LENGTH | Максимальная длина текста (по умолчанию: 3000) |
| 6 | CACHE_PATH | Путь к директории для кеширования (по умолчанию: .cache) |
| 7 | MODEL_ID_OR_PATH | Идентификатор или путь к модели (по умолчанию: cointegrated/rubert-base-cased-nli-threeway) |
| 8 | ENCODER_ID_OR_PATH | Идентификатор или путь к энкодеру (по умолчанию: cointegrated/rubert-tiny2) |
| 9 | REDIS_OM_URL | URL для подключения к Redis |
| 10 | REDIS_TTL | Время жизни кеша в секундах (по умолчанию: 3600 секунд или 1 час) |
| 11 | REDIS_TASK_QUEUE_NAME | Имя очереди задач (по умолчанию: task_id_queue) |
Важно: Переменная REDIS_OM_URL не имеет значения по умолчанию, его нужно задать!
Например, можно задать переменные окружения через .env файл:
echo "REDIS_OM_URL=redis://127.0.0.1:6379/0" > .env
- Выполнить команды перехода в созданную папку и сборки контейнера:
cd /opt/log-rel _compose/
- Запуск докер-контейнера:
sudo docker compose up -d
Установка Модуля Генеративных ответов
- Скопировать полученный образ в папку /opt и загрузить его в докер:
sudo docker load --input assistant.tar.gz
- Создать папку assistant_compose
sudo mkdir /opt/assistant_compose/
- Создать файл compose.yml
sudo nano /opt/assistant_compose/compose.yml
- Заполнить содержимое compose.yml следующим содержанием:
version: "3.9"
services:
app:
image: assistant-protected:latest
command: uvicorn app.main:app --port ${PORT:-8019} --host 0.0.0.0
ports:
- ${PORT:-8019}:8019
env_file:
- .env
restart: always
- Создать файл .env
sudo nano /opt/assistant_compose/.env
- Заполнить содержимое файла /opt/assistant_compose/.env.
Описание переменных окружения
| № | Наименование переменной | Описание |
|---|---|---|
| 1 | ASSISTANT_API_KEY | Ключ LLM API. Обязательный параметр |
| 2 | ASSISTANT_MODEL_NAME | Имя LLM модели. Обязательный параметр (по умолчанию: IlyaGusev/saiga_gemma2_9b) |
| 3 | ASSISTANT_API_URL | Адрес LLM API. Обязательный параметр |
| 4 | ASSISTANT_MODEL_MAX_TOKENS | Размер контекстного окна LLM. Обязательный параметр (по умолчанию: 4096) |
| 5 | ASSISTANT_MODEL_DEFAULT_RESERVED_TOKENS | Количество зарезервированных токенов LLM (по умолчанию: 600) |
- Запуск докер-контейнера:
sudo docker compose up -d
Запуск сервиса API+LLM
- Установить заголовки ядра:
sudo apt-get install linux-headers-$(uname -r)
-
Установить CUDA по инструкции: https://developer.nvidia.com/cuda-downloads
-
Проверьте, что CUDA установлена:
nvidia-smi
- Запустите сервис:
docker compose up -d
Примечание: Убедитесь, что .env и docker-compose.yml настроены корректно перед запуском.
Запуск только API (если LLM на другом сервере)
docker compose up -d --scale llm=0
Примечание: Убедитесь, что .env и docker-compose.yml настроены корректно перед запуском.
Установка Модуля семантического анализа
- Запуск докер-контейнера:
sudo docker run --name=recsystem -d -p 8089:8080 -e AllowedHosts=* -e Ais_Host=http://iw-astra-ais-01.msk.innowave.ai/ -e Default_Index=gost -e AUTH_CLIENT_ID=recsystem -e AUTH_URL=https://krbauth.docker.stereos-group.ru -e AUTH_CLIENT_SECRET=BIbozDXMCO5gF***NowZxYgIOn -e AUTH_REALM_NAME=searchai-recsystem -e Ais_User=SUser -e Ais_Password=P@ssw0rd -e Ais_DomainName=msk.innowave.ai -e Word_Count_In_One_Query=3 -e Max_Gap_Between_Paragraphs=50 -e Percentage_Word_Contains=10 -e Max_Chars_Overflow=23 -e Percentage_Docs_Contains=80 -e Percentage_Of_Similarity=80 -e String_Terminator='\n.' -e AUTH_ENABLED=true cr.yandex/crp51*******p98t9i9/iw-ais-recsystem-winauth
Описание переменных окружения
| № | Наименование переменной | Описание |
|---|---|---|
| 1 | AUTH_CLIENT_ID | Наименование клиента в keycloak |
| 2 | AUTH_CLIENT_SECRET | Секретный ключ для клиента keycloak |
| 3 | AUTH_URL | Адрес keycloak |
| 4 | AUTH_REALM_NAME | Наименование реалма в keycloak |
| 5 | AIS_ServiceUrl | Адрес AIS |
| 6 | Default_Index | Наименование индекса по умолчанию |
| 7 | AIS_User | Логин суперпользователя AIS |
| 8 | AIS_Password | Пароль суперпользователя AIS |
| 9 | AIS_DomainName | Домен, в котором находится AIS |
| 10 | Word_Count_In_One_Query | Максимальное количество слов в одном запросе к AIS (для разбивки) |
| 11 | Max_Gap_Between_Paragraphs | Максимальное количество символов между найденными группами, чтобы объединить их в одну |
| 12 | Percentage_Word_Contains | Процент слов которые должны совпасть из запроса и выдаче, чтобы считать выдачу валидной |
| 13 | Max_Chars_Overflow | Количество добавочных символов в конец выборки до последнего пробела или до стоп символов |
| 14 | Percentage_Docs_Contains | Процент документов в общем списке выдачи. которые должны повторяться, чтобы считать документ похожим |
| 15 | Percentage_Of_Similarity | Каков процент похожести по длине относительно входящей строке должен быть результат. 0 - выдаёт все, 100 - должно быть не менее длины запроса |
| 16 | String_Terminator | Стоп символы для продления строки из выдачи (по умолчанию ;.\r\n) |
| 17 | AUTH_ENABLED | Флаг активации авторизации |
Установка Модуля хранения
- Установка docker образа БД:
sudo docker pull postgres:16.3
sudo docker run -itd -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=P@ssw0rd -p 5432:5432 -v ./data:/var/lib/postgresql/data --name postgresql postgres:16.3
- Запуск докер-контейнера:
sudo docker run -d --name searchservicearchive -p 3500:8080 -e AUTH_CLIENT_ID=recsystem -e AUTH_CLIENT_SECRET=BIbozDXMCO5gF***NowZxYgIOn -e AUTH_URL=https://krbauth.docker.stereos-group.ru -e AUTH_REALM_NAME=searchai-recsystem -e ASPNETCORE_ENVIRONMENT=Development -e ConnectionString='Host=st-ubn-stn-***.stereos-group.ru;Port=5433;Database=SearchaiArchive;Username=postgres;Password=P@ssw0rd' cr.yandex/crp516dtlnlrjp98t9i9/search-ai-service-archive
Описание переменных окружения
| № п./п. | Наименование переменной | Описание |
|---|---|---|
| 1 | AUTH_CLIENT_ID | Наименование клиента в keycloak |
| 2 | AUTH_CLIENT_SECRET | Секретный ключ для клиента keycloak |
| 3 | AUTH_URL | Адрес keycloak |
| 4 | AUTH_REALM_NAME | Наименование реалма в keycloak |
| 5 | ASPNETCORE_ENVIRONMENT | Среда выполнения .Net |
| 6 | ConnectionString | Строка подключения к базе данных для работы сервиса |
Установка ProxyBack
- Запуск докер-контейнера:
sudo docker run -d --name proxyback -p 3499:8080 -e AUTH_CLIENT_ID=recsystem -e AUTH_CLIENT_SECRET=BIbozDXMCO5gF***NowZxYgIOn -e AUTH_URL=https://krbauth.docker.stereos-group.ru -e AUTH_REALM_NAME=searchai-recsystem -e AIS_ServiceUrl=http://iw-astra-ais-01.msk.innowave.ai/ -e DEFAULT_INDEX=gost -e AIS_User=Suser -e AIS_Password=P@ssw0rd -e AIS_DomainName=msk.innowave.ai -e LOG_REL_ServiceUrl=http://st-ubn-stn-server.stereos-group.ru:8282 -e ASS_ServiceUrl=http://st-ubn-stn-server.stereos-group.ru:8019 -e REC_SYS_ServiceUrl=http://st-ubn-stn-server.stereos-group.ru:8089 -e ARCHIVE_ServiceUrl=http://st-ubn-stn-server.stereos-group.ru:3500 -e AUTH_ENABLED=true cr.yandex/crp51*******p98t9i9/search-ai-service
Описание переменных окружения
| № п./п. | Наименование переменной | Описание |
|---|---|---|
| 1 | AUTH_CLIENT_ID | Наименование клиента в keycloak |
| 2 | AUTH_CLIENT_SECRET | Секретный ключ для клиента keycloak |
| 3 | AUTH_URL | Адрес keycloak |
| 4 | AUTH_REALM_NAME | Наименование реалма в keycloak |
| 5 | AIS_ServiceUrl | Адрес AIS |
| 6 | DEFAULT_INDEX | Наименование индекса по умолчанию |
| 7 | AIS_User | Логин суперпользователя AIS |
| 8 | AIS_Password | Пароль суперпользователя AIS |
| 9 | AIS_DomainName | Домен, в котором находится AIS |
| 10 | LOG_REL_ServiceUrl | Адрес сервиса log-rel |
| 11 | ASS_ServiceUrl | Адрес сервиса assistant |
| 12 | REC_SYS_ServiceUrl | Адрес сервиса рекомендательной системы |
| 13 | ARCHIVE_ServiceUrl | Адрес сервиса архивации |
| 14 | AUTH_ENABLED | Флаг активации авторизации |
Установка модуля «Рабочее место пользователя»
- Создать папку /opt/FrontendConfig
- Создать файл /opt/FrontendConfig/app_config.json с содержимым:
{
"classification": "true",
"generation": "true",
"entity": "true",
"logo": "default",
"KEYCLOAK": "https://krbauth.docker.stereos-group.ru/realms/searchai-recsystem/protocol/openid-connect",
"clientID": "recsystemPKCE",
"enableGuest": "true",
"isMarkInaccessibleDocs": "true",
"url_backendapi":"http://st-ubn-stn-server.stereos-group.ru:3499",
"url_backendapi_dev": "http://st-ubn-stn-server.stereos-group.ru:3499",
"indexName":"gost",
"sourcesName": "FileSystem"
}
Где:
- KEYCLOAK – URL-адрес сервера Keycloak;
- clientID – имя клиента, созданного для авторизации с использованием PKCE в Keycloak;
- url_backendapi – адрес Proxy-back сервера.
- Запуск докер-контейнера:
sudo docker run -d -p 5000:5000 -v /opt/FrontendConfig/app_config.json:/src/dist/app_config.json --name frontend cr.yandex/crp51*******p98t9i9/stn-frontend
Настройка кластеризации компонентов
Настройка кластеризации поисковых компонентов AIS осуществляется в соответствии с Content AI Intelligent Search - Руководство по установке. Для настройки кластеризации остальных компонентов Системы используется HAProxy по протоколу TCP. Для настройки:
- Откройте конфигурационный файл HAProxy. Обычно он находится в /etc/haproxy/haproxy.cfg на Linux.
- Настройте глобальные параметры
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
- Настройте параметры по умолчанию:
defaults
log global
mode tcp
option tcplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
maxconn 2048
- Настройте фронтенд и проксибек для балансировки TCP трафика:
frontend my_frontend
bind :N – порт для прослушивания
default_backend my_backend
backend my_backend
balance leastconn
mode tcp
server server1 192.168.1.101:5000 check – Адрес сервера 1
server server2 192.168.1.102:5000 check – Адрес сервера 2
server server3 192.168.1.103:5000 check – Адрес сервера 3
frontend proxyback
bind : N – порт для прослушивания
default_backend my_backend
backend proxyback_backend
balance leastconn
mode tcp
server server1 192.168.1.101:5000 check – Адрес сервера 1
server server2 192.168.1.102:5000 check – Адрес сервера 2
server server3 192.168.1.103:5000 check – Адрес сервера 3
frontend logrel
bind : N – порт для прослушивания
default_backend logrel_backend
backend logrel_backend
balance leastconn
mode tcp
server logrel_server1 192.168.1.101:5000 check – Адрес сервера 1
server logrel_server2 192.168.1.102:5000 check – Адрес сервера 2
server logrel _server3 192.168.1.103:5000 check – Адрес сервера 3
frontend assistant
bind : N – порт для прослушивания
default_backend logrel_backend
backend assistant_backend
balance leastconn
mode tcp
server assistant _server1 192.168.1.101:5000 check – Адрес сервера 1
server assistant_logrel_server2 192.168.1.102:5000 check – Адрес сервера 2
server assistant _server3 192.168.1.103:5000 check – Адрес сервера 3
frontend reksystem
bind : N – порт для прослушивания
default_backend logrel_backend
backend reksystem_backend
balance roundrobin
option tcp-check
server reksystem_server1 192.168.1.107:8000 check
server reksystem_server2 192.168.1.108:8000 check
server reksystem_server3 192.168.1.109:8000 check
- Сохраните и закройте конфигурационный файл.
- Перезапустите HAProxy для применения изменений:
sudo systemctl restart haproxy